... and listen to it in the cases where they use other style providers.
g_free (free_data);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (css_provider));
+
return ret;
}
GFile *file,
GError **error)
{
+ gboolean success;
+
g_return_val_if_fail (GTK_IS_CSS_PROVIDER (css_provider), FALSE);
g_return_val_if_fail (G_IS_FILE (file), FALSE);
gtk_css_provider_reset (css_provider);
- return gtk_css_provider_load_internal (css_provider, NULL, file, NULL, error);
+ success = gtk_css_provider_load_internal (css_provider, NULL, file, NULL, error);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (css_provider));
+
+ return success;
}
/**
gtk_style_properties_unset_property (priv->style, prop, state);
g_signal_emit (style, signals[CHANGED], 0);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}
void
gtk_style_properties_unset_property (priv->style, "font", 0);
g_signal_emit (style, signals[CHANGED], 0);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}
void
name, symbolic_color);
g_signal_emit (style, signals[CHANGED], 0);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}
void
}
g_signal_emit (style, signals[CHANGED], 0);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}
g_object_unref (priv->style);
priv->style = NULL;
}
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (settings));
}
static void
{
GtkStyleProvider *provider;
guint priority;
+ guint changed_signal_id;
};
static GtkStyleProvider *
{
GtkStyleProviderData *data = data_;
+ g_signal_handler_disconnect (data->provider, data->changed_signal_id);
g_object_unref (data->provider);
}
return;
if (parent)
- g_object_ref (parent);
+ {
+ g_object_ref (parent);
+ g_signal_connect_swapped (parent,
+ "-gtk-private-changed",
+ G_CALLBACK (_gtk_style_provider_private_changed),
+ cascade);
+ }
if (cascade->parent)
- g_object_unref (cascade->parent);
+ {
+ g_signal_handlers_disconnect_by_func (cascade->parent,
+ _gtk_style_provider_private_changed,
+ cascade);
+ g_object_unref (cascade->parent);
+ }
cascade->parent = parent;
}
data.provider = g_object_ref (provider);
data.priority = priority;
+ data.changed_signal_id = g_signal_connect_swapped (provider,
+ "-gtk-private-changed",
+ G_CALLBACK (_gtk_style_provider_private_changed),
+ cascade);
/* ensure it gets removed first */
_gtk_style_cascade_remove_provider (cascade, provider);
break;
}
g_array_insert_val (cascade->providers, i, data);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (cascade));
}
void
if (data->provider == provider)
{
g_array_remove_index (cascade->providers, i);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (cascade));
break;
}
}
g_hash_table_replace (priv->color_map,
g_strdup (name),
gtk_symbolic_color_ref (color));
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (props));
}
/**
_gtk_css_value_unref (val->value);
val->value = _gtk_css_value_ref (value);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (props));
}
/**
data->value = NULL;
g_array_remove_index (prop->values, pos);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (props));
}
}
priv = props->priv;
g_hash_table_remove_all (priv->properties);
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (props));
}
/**
}
}
}
+
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (props));
}